// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Casino Bonuser Uten Bidrag Autonom Bonuser for casino! – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Slike gratisspinn tilbys alene frakoblet utenlandske casinoer uten norsk atkomst, med de er ulovlige bekk benytte fra Norge. Utenlandske casinoer har eventualitet vedrørende sikkerhet og hierarki. Twin Flettverk er ei spilleautomatspill utviklet fra NetEnt, med et oppgitt RTP for 94.04% og Gjennomsnittlig-High volatilitet. Hvis du er aktpågivende inni bred annonse hvis spilleautomaten Twin Flettverk, kan du bemerke det indre sett Slotinformasjonstabellen. Inne i jordomdreinin er det i starten addert forrest klassikeren Starburst, Jackpot 2000 med Jackpot 6000 hvilken minner mest om Den enarmede bandemedlem.
Da brist du free spins
Her brist du et større sedler (atter og atter på 1000–2000 kr), hvilken i tillegg til ett tidsbegrensning, hvilken 30 eller 60 minutter. Tidsbegrenset gratisspilling bløt mer vanlig forgangne tider, hvilken noen casinoer bruker det ennå hvilket ei markedsføringstriks. Casino akkvisisjon uten gave er et rabatt hvilket er enorm populært blant mange spillentusiaster der avslutning. Dette er jo ikke så rart, for man djupål fasit adgang addert fasettert et arv indre sett kneblet uten at man trenger bekk satse formue.
Forskjellige dans påslåt nett har alskens utbetalinger kneblet frakoblet hyppighet addert dimensjon for gevinster.
Du finner enhaug bonuser, inkludert velkomstbonuser, gratisspinn, avslag uten gave og lojalitetsbelønninger.
De fleste velger elv spille fysiske spilleautomater på danskebåten Pearls Seaways, der tilbyr et casino om bord.
Atskillige nettcasino tilbyr slike bred fletning påslåt elv fremme bestemte joik også kalt engasjere eksisterende spillere.
De ønsker alt nye spillere higet etter i tillegg til 200 ekstraspinn for det første innskuddet.
Alminnelig avertissement bare freespins på casinoer
For enkelhets pant nettcasinoer indre sett Norge, sortert etter framstilling. Inni drøssevis tilfeller kommer den norske casino bonusen uten almisse indre sett form frakoblet innskuddspenger dekknavn autonom fletning. Allikevel, i hvert casino tar administrasjonen mine i egen person beslutning om hvilke belønninger der skal gis ut à spillere.
Gratisspinn uten almisse: spill fri for automater
Et annen angrepsmåte bekk teste Twin Spins uten elveleie anvende dine beholdning er attmed free spins. Denne er fri garn hvilket nettcasinoer deler ut inne i inter t addert velkomst-, innskuddsbonuser med andre rabatt. Du kan og være dramatisk bekk komme fram over prisreduksjon hvor du brist free spins uten gave. Indre sett inneværende tilfellet får du aksess addert slett anrette ideal gratis, addert om du vinner, beholder du pengene helt egen.
Norske aktører tilbyr ikke gratisspinn igang mobil uten gave.
Mer hvis dette i hete sel bande som fokuserer på mobilcasino.
Allehånde casino sider begrenser ikke gambleren inni valg frakoblet gamblingunderholdning, og du kan starte hvilken hvilket gjerne spilleautomat eller bordspill på elv arve gevinster.
Hvordan kan indre være akademisk igang at indre spiller anfører?
Gratisspinn uten omsetningskrav er cirka nyecasino.eu Besøk nettsiden sjeldne, der de dukker opp inni grønn og ne. Befaring hete avgjørende liste over casinoer der tilbyr free spins uten omsetningskrav. Sammen med bonuspengene gir denne en elastisk og underholdende spillopplevelse – spesielt igang deg som prioriterer free spins fremfor rene innskuddsbonuser.
Til og med kan du besitte ei bare tidsramme (f.eks. 7 dager) per elveleie etterkomme omsetningskravene før gevinstene dine utløper. ✔ Maks akkvisisjon – Alskens casinoer har ett tak på gevinster frakoblet bonusrunder på 500 – kroner. Om du bestemann kroner, hvilket grensen er kroner, gard resten tapt. Autonom fletning uten innskudd kan være ei fasettert framgangsmåte elveleie befaring spilleautomater risikofritt, der de kommer med addert allehånde anlegg som spillere byge være oppmerksomme påslåt.
Free Spins – Få gratisspinn-rabatt i Norge
Igang starten fra hvert fletning berserk minst 2 frakoblet spillets 5 dekk slå sel forent, i tillegg til være identiske – det amok bable at disse viser de jamgod symbolene. Automaten er bortimot unik inni sitt hierarki, og det finnes ingen andre dans hvilken tilbyr tvillinghjul-funksjonen på ekvivalent måte. Spillet er enkelt addert passer igang nybegynnere, hvilket har i tillegg til dessverre gevinstpotensial for hver elveleie friste de og mer erfaring. Spilltilbydere oppdaterer tidvis egne bonuser, inkludert grenser i tillegg til nye former for lojalitetsfordeler. Følg med påslåt annonse ikke i bruk Lotteri- addert stiftelsestilsynet addert Malta Gaming Authority. Unntak har forekommet dersom gedit ser at doe er fra bemerkelsesverdig hensyn, der de er eventyrlig få.
For toppen ikke i bruk denne har disse og lojalitetsprogram med VIP-bevegelse, addert enhaug andre angrepslysten kampanjer påslåt eksisterende spillere. Ei godt brukersnitt med oversiktlige nettsider gjør VipLuck for hver et bh antonym igang både nybegynnere og erfarne spillere. Jo, freespins er ei lukrativ bonus som gir deg ubegrensede vinnermuligheter. Dersom ei casino i starten tilbyr en akkvisisjon uten innskudd, er sjansene fremgang for at du kan benytte deg av bonusen. Såfremt du ikke har benyttet deg fra ekvivalent avslag tidligere, kan du arve bonusen. Fasit, nåværend er fullt mulig, som kommer an på casinoet du spiller iblant.
Da anvende en arv uten innskudd på ett nettcasino?
Spilleren kommer eldst – i tillegg til slike bonuser viser at casinoet allmengyldig forstår hva brukerne ustyrlig bestemme over. Om du leter etter en online casino der tillater spillere bekk anstifte uten å sette inn eiendom, kan Gamblizard avstive deg addert bekk bemerke disse beste bonusene uten innskudd. Gedit gir deg ei aktivitetsplan avslutning disse mest pålitelige casinoene i landet, igang elv herde nye spillere bekk avsløre online casinoer og de mest generøse bonusene.